package leetcode.editor.cn;
//给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。 
//
// 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现不止一次。 
//
// 
//
// 示例 1： 
//
// 
//输入：s = "hello"
//输出："holle"
// 
//
// 示例 2： 
//
// 
//输入：s = "leetcode"
//输出："leotcede" 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 3 * 10⁵ 
// s 由 可打印的 ASCII 字符组成 
// 
//
// Related Topics 双指针 字符串 👍 333 👎 0


import java.util.Arrays;
import java.util.List;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution197 {

    public String reverseVowels1(String s) {
        StringBuilder res = new StringBuilder(s);
        int l = 0;
        int r = s.length() - 1;
        while (l < r) {
            if (isVowel(s.charAt(l)) && isVowel(s.charAt(r))) {
                res.setCharAt(l, s.charAt(r));
                res.setCharAt(r, s.charAt(l));
                l++;
                r--;
            }
            while (l < s.length() && !isVowel(s.charAt(l))) {
                l++;
            }
            while (r > 0 && !isVowel(s.charAt(r))) {
                r--;
            }
        }
        return res.toString();
    }

    public String reverseVowels(String s) {
        char[] chars = s.toCharArray();
        int l = 0;
        int r = s.length() - 1;
        while (l < r) {
            if (isVowel(s.charAt(l)) && isVowel(s.charAt(r))) {
                char item = chars[l];
                chars[l] = chars[r];
                chars[r] = item;
                l++;
                r--;
            }
            while (l < s.length() && !isVowel(s.charAt(l))) {
                l++;
            }
            while (r > 0 && !isVowel(s.charAt(r))) {
                r--;
            }
        }
        return new String(chars);
    }

    public boolean isVowel(char ch) {
        return "aeiouAEIOU".indexOf(ch) >= 0;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
